/* Define the block status codes */
#define BLOCK_STATUS_USED 1
#define BLOCK_STATUS_UNUSED 0

/* Standard page frame size 4kb */
#define PAGE_FRAME_SIZE 4096

/* Offset the actual blocks by 600 bytes.  This leave enough room after the kernel for
   50 block headers.  i.e. a maximum of 50 blocks of physical memory may be allocated */
#define USABLE_MEM_OFFSET 1024

typedef struct {
	unsigned char * base_addr;
	unsigned char * offset_addr;
	unsigned int status;
} block_header_t;

void mm_init(unsigned char * base_addr, unsigned char * offset_addr);
block_header_t mm_getBlock(unsigned int bNum);
void * malloc(unsigned int reqSize);
void free(void * ptr);
void cleanupBlock(unsigned int i);
void shiftBlockHeadersLeft(unsigned int blockNum, unsigned int shift);
